Bài viết này TEXmath sẽ trình bày từ đầu đến cuối cách vẽ một số hình cụ thể (phía dưới). Có thể những hình vẽ này không liên quan đến chuyên ngành của bạn, nhưng qua việc theo dõi các bước vẽ, mong rằng có thể giúp bạn đọc học được một vài thủ thuật hữu ích khi phân tích và vẽ hình với TikZ.
Chọn hệ trục tọa độ và thứ tự vẽ
Để đơn giản, ta vẽ hình màu tím trước và chọn hệ trục sao cho điểm gốc O nằm ở ngày 31. Như vậy có thể ước lượng được hình vẽ sẽ nằm trong khoảng . Ta sẽ chọn khoảng cách giữa các cột là 1cm, khoảng cách giữa các hàng là 0.7cm. Chọn thứ tự vẽ các thành phần cũng quan trọng. Chúng ta sẽ chọn vẽ theo thứ tự sau
- Các ngày và thứ
- Ta vẽ hết các ngày vào đúng vị trí
- Sau đó mới vẽ đè lên các ngày có khoanh tròn
- Màu nền tím và Khung viền
- Số 28 và "Friday March 2014"
- Hai dấu chuyển ngày
- Một số hiệu chỉnh
Bắt đầu vẽ
Vẽ các ngày và thứ
Ta vẽ dòng dưới cùng trước. Ở đây ta dùng
\foreach
cho các ngày có cách vẽ giống nhau\begin{tikzpicture} \draw (0,0) node{31}; \foreach \ngay in {1,2,3,4,5,6} \draw (\ngay,0) node[gray]{\ngay}; \end{tikzpicture}
Tiếp theo ta vẽ các dòng từ 2 đến 5 (từ dưới lên) bằng cách thêm vào các câu lệnh như sau
\foreach \ngay in {24,25,26,27,28,29,30} \draw (\ngay-24,0.7) node{\ngay}; \foreach \ngay in {17,18,19,20,21,22,23} \draw (\ngay-17,1.4) node{\ngay}; \foreach \ngay in {10,11,12,13,14,15,16} \draw (\ngay-10,2.1) node{\ngay}; \foreach \ngay in {3,4,5,6,7,8,9} \draw (\ngay-3,2.8) node{\ngay};
Các bạn chú ý phép trừ trong tọa độ các điểm, chúng giúp các điểm tịnh tiến lại đúng vị trí mình mong muốn. Tiếp theo, vẽ thêm dòng đầu tiên của calendar bằng các lệnh sau
\foreach \ngay in {24,25,26,27,28} \draw (\ngay-24,3.5) node[gray]{\ngay}; \draw (5,3.5) node{1}; \draw (6,3.5) node{2};
Bây giờ ta vẽ đến các thứ. Ta cũng dùng vòng lặp \foreach nhưng lần này sẽ dùng 2 biến là
\toado
(tọa độ) và \thu
(thứ)\foreach \toado / \thu in {0/Mo, 1/Tu, 2/We, 3/Th, 4/Fr, 5/Sa, 6/Su} \draw (\toado,4.2) node[violet]{\thu};
Vẽ các ngày khoanh tròn. Các ngày này có cách vẽ giống nhau, nhưng lại không có vị trí theo quy luật nên không dùng
\foreach
được. Do đó chúng ta vẽ mỗi ngày khoanh tròn bằng mỗi câu lệnh. Ví dụ ngày 28 có tọa độ là (4,0.7)
ta vẽ như sau\fill [orange] (4,0.7) circle(3mm) node[white]{28};
Ở đây ta dùng
\fill
để tạo mảng màu (không có viền) là một hình tròn bán kình 3mm Những ngày khoanh tròn còn lại bạn vẽ hoàn toàn tương tự nhéVẽ màu nền tím
Ta sẽ dùng lệnh vẽ hình chữ nhật (rectangle) để vẽ vùng màu tím, do đó ta cần ước lượng tọa độ hai góc dưới-trái và trên-phải (sau khi vẽ nếu chưa vừa ý có thể tinh chỉnh lại). Thêm vào khối lệnh của chúng ta câu lệnh sau
\fill [violet] (-0.8,4.9) rectangle (6.8,10.5);
Tiếp theo ta vẽ khung viền bên ngoài. Để ý là hai góc trên của vùng màu tím cần phải cua tròn, do đó ta sẽ vẽ khung viền có góc tròn và đè lên vùng màu tím. Ta dùng lệnh vẽ có clip (cắt xén) như sau
\draw [clip,rounded corners=8pt] (-0.8,-0.5) rectangle (6.8,10.5);
Bạn phải đặt câu lệnh clip ở trước câu lệnh bị cắt (lệnh tạo vùng màu tím), điều này đã nói ở bài viết trước. Khi đó bạn sẽ được hình vẽ như thế này
Số 28 và "Friday March 2014"
Bước này chỉ cần ước lượng tọa độ của điểm cần đặt node
\draw (1,7.7) node[white]{\fontsize{70pt}{1.2}\selectfont 28}; \draw (1,9.1) node[white]{\fontsize{16pt}{1.2}\selectfont March 2017}; \draw (1,9.7) node[white]{\fontsize{16pt}{1.2}\selectfont Friday};
Ở đây ta dùng lệnh
\fontsize{70pt}{1.2}\selectfont
để cài đặt font-size 70pt, dãn dòng 1.2 Font chữ chưa giống hoàn toàn hình ta cần vẽ. Chúng ta sẽ hiệu chỉnh ở phần cuối.Vẽ 2 nút chuyển ngày
Các bạn đã biết cách vẽ 2 đoạn thẳng liên tiếp ở bài viết trước. Do đó ở bước này ta chỉ cần chọn tọa độ các điểm cho hợp lí và vẽ các đoạn thẳng
\draw [white, thick] (5.1,9.9) -- (5,9.7) -- (5.1,9.5); \draw [white, thick] (5.9,9.9) -- (6,9.7) -- (5.9,9.5);
Đến đây ta đã hoàn thành 90% công việc rồi. Để hoàn thiện hình vẽ ta làm thêm một số hiệu chỉnh
Hiệu chỉnh
Chúng ta sẽ thay đổi font cho các node bằng cách đặt lệnh sau vào ngay sau lệnh
\begin{tikzpicture}
\tikzset{every node/.append style={font=\sffamily}};
Nếu bạn thích, bạn có thể làm nhạt thêm các ngày của tháng 2 và tháng 4 bằng cách thêm
!50
vào sau gray. Và đây là kết quả sau khi thay đổi màu sắc\documentclass[a4paper]{report} \usepackage{tikz} \begin{document} \begin{tikzpicture} \tikzset{every node/.append style={font=\sffamily}}; \foreach \ngay in {3,4,5,6,7,8,9} \draw (\ngay-3,0) node[gray!50]{\ngay}; \foreach \ngay in {26,27,28,29,30} \draw (\ngay-26,0.7) node{\ngay}; \foreach \ngay in {1,2} \draw (\ngay+4,0.7) node[gray!50]{\ngay}; \foreach \ngay in {19,20,21,22,23,24,25} \draw (\ngay-19,1.4) node{\ngay}; \foreach \ngay in {12,13,14,15,16,17,18} \draw (\ngay-12,2.1) node{\ngay}; \foreach \ngay in {5,6,7,8,9,10,11} \draw (\ngay-5,2.8) node{\ngay}; \foreach \ngay in {1,2,3,4} \draw (\ngay+2,3.5) node{\ngay}; \foreach \ngay in {29,30,31} \draw (\ngay-29,3.5) node[gray!50]{\ngay}; \foreach \vitri / \thu in {0/Mo, 1/Tu, 2/We, 3/Th, 4/Fr, 5/Sa, 6/Su} \draw (\vitri,4.2) node[magenta]{\thu}; \fill [magenta] (5,1.4) circle(3mm) node[white]{24}; \draw [clip,rounded corners=8pt] (-0.8,-0.5) rectangle (6.8,10.5); \fill [magenta!70] (-0.8,4.9) rectangle (6.8,10.5); \draw (1,7.7) node[white]{\fontsize{70pt}{1.2}\selectfont 24}; \draw (1,9.1) node[white]{\fontsize{16pt}{1.2}\selectfont November 2017}; \draw (1,9.7) node[white]{\fontsize{16pt}{1.2}\selectfont Friday}; \draw [white, thick] (5.1,9.9) -- (5,9.7) -- (5.1,9.5); \draw [white, thick] (5.9,9.9) -- (6,9.7) -- (5.9,9.5); \end{tikzpicture} \end{document}
Kết
Như đã nói ở lúc đầu, có thể hình vẽ chẳng liên quan đến chuyên ngành của bạn, nhưng qua thông qua bài viết này hy vọng có thể giúp bạn hình dung được các bước vẽ một hình trong TikZ như thế nào. Bài viết tiếp theo TEXmath sẽ cố gắng giới thiệu đến các bạn những thủ thuật thiết thực khác, những hình vẽ phức tạp hơn một chút.